---
title: 参数选项
sidebar_position: 3
---

# 参数选项

## 应用程序参数选项

该`Options.App`结构包含应用程序配置。它被传递给`wails.Run()`方法：

```go title="Example"
import "github.com/wailsapp/wails/v2/pkg/options"

func main() {

    err := wails.Run(&options.App{
        Title:             "Menus Demo",
        Width:             800,
        Height:            600,
        DisableResize:     false,
        Fullscreen:        false,
        Frameless:         true,
        MinWidth:          400,
        MinHeight:         400,
        MaxWidth:          1280,
        MaxHeight:         1024,
        StartHidden:       false,
        HideWindowOnClose: false,
        RGBA:              &options.RGBA{R: 0, G: 0, B: 0, A: 255},
        AlwaysOnTop:       false,
        Assets:            assets,
        Menu:              app.applicationMenu(),
        Logger:            nil,
        LogLevel:          logger.DEBUG,
        OnStartup:         app.startup,
        OnDomReady:        app.domready,
        OnShutdown:        app.shutdown,
        OnBeforeClose:     app.beforeClose,
        WindowStartState:  options.Maximised,
        Bind: []interface{}{
            app,
        },
        Windows: &windows.Options{
            WebviewIsTransparent:              false,
            WindowIsTranslucent:               false,
            DisableWindowIcon:                 false,
            DisableFramelessWindowDecorations: false,
            WebviewUserDataPath:               "",
        },
        Mac: &mac.Options{
            TitleBar: &mac.TitleBar{
                TitlebarAppearsTransparent: true,
                HideTitle:                  false,
                HideTitleBar:               false,
                FullSizeContent:            false,
                UseToolbar:                 false,
                HideToolbarSeparator:       true,
            },
			Appearance:           mac.NSAppearanceNameDarkAqua,
            WebviewIsTransparent: true,
            WindowIsTranslucent:  false,
            About: &mac.AboutInfo{
                Title:   "My Application",
                Message: "© 2021 Me",
                Icon:    icon,
            },
        },
    })
    if err != nil {
        log.Fatal(err)
    }
}

```

### 标题

名称：Title

类型：string

窗口标题栏中显示的文本。

### 宽度

名称：Width

类型：int

窗口的初始宽度。默认值：1024。

### 高度

名称：Height

类型：int

窗口的初始高度。默认值：768

### 禁用调整窗口尺寸

名称：DisableResize

类型：bool

默认情况下，主窗口可调整大小。将此设置为 `true` 将使其保持固定大小。

### 全屏

名称：Fullscreen

类型：bool

将此设置为 `true` 将在启动时使窗口全屏。

### 无边框

名称：Frameless

类型：bool

设置为`true`时，窗口将没有边框或标题栏。另请参阅[无边框窗口](/docs/guides/frameless)。

### 最小宽度

名称：MinWidth

类型：int

这将设置窗口的最小宽度。如果给出的值`Width`小于这个值，窗口将被设置为`MinWidth`默认值。

### 最小高度

名称：MinHeight

类型：int

这将设置窗口的最小高度。如果给出的值`Height`小于这个值，窗口将被设置为`MinHeight`默认值。

### 最大宽度

名称：MaxWidth

类型：int

这将设置窗口的最大宽度。如果给出的值`Width`大于这个值，窗口将被设置为`MaxWidth`默认值。

### 最大高度

名称：MaxHeight

类型：int

这将设置窗口的最大高度。如果给出的值`Height`大于这个值，窗口将被设置为`MaxHeight`默认值。

### 启动时隐藏窗口

名称：StartHidden

类型：bool

设置为`true`时，应用程序将被隐藏，直到调用[显示窗口](/docs/reference/runtime/window#显示窗口)。

### 关闭时隐藏窗口

名称：HideWindowOnClose

类型：bool

默认情况下，关闭窗口将关闭应用程序。将此设置为`true`意味着关闭窗口将隐藏窗口。

### RGBA

名称：RGBA

类型：int (0xRRGGBBAA) 示例：0xFF000088 - 透明度为 50% 的红色

该值是默认设置窗口的 RGBA 值。默认值：0xFFFFFFFF。

### 窗口固定在最顶层

名称：AlwaysOnTop

类型：bool

窗口在失去焦点时应保持在其他窗口之上。

### 资源

名称：Assets

类型：\*embed.FS

应用程序要使用的前端资源。需要一个`index.html`文件。

### 菜单

名称：Menu

类型：\*menu.Menu

应用程序要使用的菜单。[菜单参考](/docs/reference/runtime/menu)中有关菜单的更多详细信息。

注意：在 Mac 上，如果未指定菜单，则将创建默认菜单。

### 日志

名称：Logger

类型：logger.Logger

默认值：Logger to Stdout

应用程序要使用的记录器。有关日志记录的更多详细信息，请参阅[日志参考](/docs/reference/runtime/log)。

### 日志级别

名称：LogLevel

类型：logger.LogLevel

默认值：在开发模式下是`Info`，在生产模式下是`Error`。

默认日志级别。有关日志记录的更多详细信息，请参阅[设置日志等级](/docs/reference/runtime/log#设置日志等级)。

### 应用启动回调

名称：OnStartup

类型：func(ctx context.Context)

此回调在前端创建之后调用，但在`index.html`加载之前调用。它提供了应用程序上下文。

### 前端 Dom 加载完成回调

名称：OnDomReady

类型：func(ctx context.Context)

在前端加载`index.html`完毕并且 DOM 准备就绪后调用此回调。它提供了应用程序上下文。

### 应用退出回调

名称：OnShutdown

类型：func(ctx context.Context)

在前端被销毁之后，应用程序终止之前，调用此回调。它提供了应用程序上下文。

### 关闭应用程序之前回调

名称：OnBeforeClose

类型：func(ctx context.Context) bool

如果设置了此回调，它将在通过单击窗口关闭按钮或调用`runtime.Quit`即将退出应用程序时被调用. 返回 `true` 将导致应用程序继续，`false` 将继续正常关闭。这有助于与用户确认他们希望退出程序。

示例：

```go title=windowsapp.go
func (b *App) beforeClose(ctx context.Context) (prevent bool) {
	dialog, err := runtime.MessageDialog(ctx, runtime.MessageDialogOptions{
		类型：          runtime.QuestionDialog,
		Title:         "Quit?",
		Message:       "Are you sure you want to quit?",
	})

	if err != nil {
		return false
	}
	return dialog != "Yes"
```

### 窗口启动状态

名称：WindowStartState

类型： options.WindowStartState

定义窗口在启动时应如何呈现。

| 值         | Win | Mac |
| ---------- | --- | --- |
| Fullscreen | ✅  | ✅  |
| Maximised  | ✅  | ✅  |
| Minimised  | ✅  |     |

### 绑定

名称：Bind

类型： []interface{}

定义需要绑定到前端的方法的一部分结构实例。

### Windows

名称：Windows

类型：\*windows.Options

这定义了[Windows 特定的选项](#windows-特定选项)。

### Mac

名称：Mac

类型：\*mac.Options

这定义了[Mac 特定的选项](#mac-特定选项)。

## Windows 特定选项

### 网页透明

名称：WebviewIsTransparent

类型：bool

设置为 `true` 时将使 WebView 背景透明。这意味着如果你使用`rgba(0,0,0,0)`，主窗口将显示。通常与[窗口半透明](#窗口半透明)结合使用以制作冰霜效果的应用程序。

### 窗口半透明

名称：WindowIsTranslucent

类型：bool

将此设置为 `true` 将使窗口半透明。通常与[网页透明](#网页透明) 结合使用以制作冰霜效果的应用程序。

### 禁用窗口图标

名称：DisableWindowIcon

类型：bool

将此设置为 `true` 将删除标题栏左上角的图标。

### 禁用无边框窗口装饰

名称：DisableFramelessWindowDecorations

类型：bool

将此设置为`true`将移除[无边框](#无边框)模式下的窗口装饰。这意味着将不会有`Aero 阴影` 和 `圆角`显示在窗口上。请注意，`圆角`只在 Windows 11 上支持。

### Webview 用户数据路径

名称：WebviewUserDataPath

类型：string

这定义了 WebView2 存储用户数据的路径。如果为空将使用`%APPDATA%\[BinaryName.exe]`。

## Mac 特定选项

### 标题栏

名称：TitleBar

类型：[\*mac.TitleBar](#标题栏结构)

TitleBar 结构提供了配置标题栏外观的能力。

### 外观

名称：Appearance

类型：[AppearanceType](#外观类型)

Appearance 用于根据 Apple 的 [NSAppearance](https://developer.apple.com/documentation/appkit/nsappearancename?language=objc) 名称设置应用程序的样式。

### 网页透明

名称：WebviewIsTransparent

类型：bool

设置为 `true` 时将使 WebView 背景透明。这意味着如果你使用`rgba(0,0,0,0)`，主窗口将显示。通常与[窗口半透明](#窗口半透明)结合使用以制作冰霜效果的应用程序。

### 窗口半透明

名称：WindowIsTranslucent

类型：bool

将此设置为 `true` 将使窗口半透明。通常与[网页透明](#网页透明) 结合使用以制作冰霜效果的应用程序。

### 关于

名称：About

类型：[About](#关于结构)

此配置允许您为“AppMenu” role 创建的应用程序菜单中的“关于”菜单项设置标题、消息和图标。

#### 标题栏结构

可以使用 TitleBar 选项自定义应用程序的标题栏：

```go
type TitleBar struct {
	TitlebarAppearsTransparent bool
	HideTitle                  bool
	HideTitleBar               bool
	FullSizeContent            bool
	UseToolbar                 bool
	HideToolbarSeparator       bool
}
```

| 名称                       | 描述                                                                                                                                           |
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| TitlebarAppearsTransparent | 使标题栏透明。[Apple Docs](https://developer.apple.com/documentation/appkit/nswindow/1419167-titlebarappearstransparent?language=objc)         |
| HideTitle                  | 隐藏窗口的标题。[Apple Docs](https://developer.apple.com/documentation/appkit/nswindowtitlevisibility?language=objc)                           |
| HideTitleBar               | 从样式掩码中移除 [NSWindowStyleMaskTitled](https://developer.apple.com/documentation/appkit/nswindowstylemask/nswindowstylemasktitled/)。      |
| FullSizeContent            | 使 webview 填满整个窗口。[Apple Docs](https://developer.apple.com/documentation/appkit/nswindowstylemask/nswindowstylemaskfullsizecontentview) |
| UseToolbar                 | 向窗口添加默认工具栏。 [Apple Docs](https://developer.apple.com/documentation/appkit/nstoolbar?language=objc)                                  |
| HideToolbarSeparator       | 删除工具栏下方的线条。 [Apple Docs](https://developer.apple.com/documentation/appkit/nstoolbar/1516954-showsbaselineseparator?language=objc)   |

预设的标题栏设置可用：

| 设置                        | 示例                                          |
| --------------------------- | --------------------------------------------- |
| `mac.TitleBarDefault()`     | ![](/img/reference/titlebar-default.png)      |
| `mac.TitleBarHidden()`      | ![](/img/reference/titlebar-hidden.png)       |
| `mac.TitleBarHiddenInset()` | ![](/img/reference/titlebar-hidden-inset.png) |

示例：

```go
Mac: &mac.Options{
	TitleBar:     mac.TitleBarHiddenInset(),
}
```

单击[此处](https://github.com/lukakerr/NSWindowStyles)获取有关自定义标题栏的一些灵感。

#### 外观类型

您可以指定应用程序的[外观](https://developer.apple.com/documentation/appkit/nsappearance?language=objc)。

| 值                                                    | 描述                           |
| ----------------------------------------------------- | ------------------------------ |
| DefaultAppearance                                     | 使用默认系统值                 |
| NSAppearanceNameAqua                                  | 标准日间系统外观               |
| NSAppearanceNameDarkAqua                              | 标准黑夜系统外观               |
| NSAppearanceNameVibrantLight                          | 轻盈灵动的外观                 |
| NSAppearanceNameAccessibilityHighContrastAqua         | 标准白天系统外观的高对比度版本 |
| NSAppearanceNameAccessibilityHighContrastDarkAqua     | 标准黑夜系统外观的高对比度版本 |
| NSAppearanceNameAccessibilityHighContrastVibrantLight | 轻盈灵动外观的高对比度版本     |
| NSAppearanceNameAccessibilityHighContrastVibrantDark  | 深色活力外观的高对比度版本     |

示例：

```go
Mac: &mac.Options{
    Appearance: mac.NSAppearanceNameDarkAqua,
}
```

#### 关于结构

```go
type AboutInfo struct {
	Title   string
	Message string
	Icon    []byte
}
```

如果提供了这些设置，“关于”菜单项将出现在应用程序菜单中（使用`AppMenu` role 时）。建议这样配置：

```go
//go:embed build/appicon.png
var icon []byte

func main() {
	err := wails.Run(&options.App{
	    ...
        Mac: &mac.Options{
            About: &mac.AboutInfo{
                Title:   "My Application",
                Message: "© 2021 Me",
                Icon:    icon,
            },
        },
    })
```

“关于”菜单项将出现在应用程序菜单中：

<div class="text--center">
  <img
    src="/img/reference/about-menu.png"
    style={{
      "box-shadow":
        "rgb(255 255 255 / 20%) 0px 4px 8px 0px, rgb(104 104 104) 0px 6px 20px 0px",
    }}
  />
</div>
<br />

单击后，将打开一个关于消息框：

<div class="text--center">
  <img
    src="/img/reference/about-dialog.png"
    width="40%"
    style={{
      "box-shadow":
        "rgb(255 255 255 / 20%) 0px 4px 8px 0px, rgb(104 104 104) 0px 6px 20px 0px",
    }}
  />
</div>
<br />
